const express = require('express')
const { exec } = require('child_process')
const cors = require('cors')
const path = require('path')

const app = express()
app.use(cors())
app.use(express.json())
// 静态页面托管
app.use('/', express.static(path.join(__dirname, 'public')))

const REPO_DIR = 'E:\\demo'

// 获取分支接口
app.get('/branches', (req, res) => {
  // 使用 git 命令获取远程分支并按提交时间排序
  exec('git for-each-ref --sort=-committerdate --format="%(refname:short)" refs/remotes/origin/', { cwd: REPO_DIR }, (err, stdout) => {
    if (err) {
      res.status(500).json({ error: '获取分支失败' })
      return
    }
    // 解析分支名
    const branches = stdout
      .split('\n')
      .map(line => line.replace('origin/', '').trim())
      .filter(b => b && !b.startsWith('HEAD'))
    const unique = [...new Set(branches)]
    res.json(unique)
  })
})

// 部署接口
app.post('/deploy', (req, res) => {
  const branch = req.body.branch
  const env = req.body.env
  if (!branch) return res.status(400).json({ error: '未选择分支' })
  if (!env) return res.status(400).json({ error: '未选择环境' })

  const deployCmd = `cross-env NODE_ENV=${env} node deploy.js ${branch}` // 设置环境变量
  const child = exec(deployCmd, (err, stdout, stderr) => { })

  let output = ''
  child.stdout.on('data', data => {
    output += data
    res.write(data)
  })
  child.stderr.on('data', data => {
    output += data
    res.write(data)
  })

  child.on('close', code => {
    res.end('\n=== 部署结束 ===\n')
  })
})

// 启动服务
app.listen(3333, async () => {
  // 修改日志输出
  console.log('部署工具服务已在本地启动，监听端口 3333')
  console.log('可通过浏览器访问前端页面： http://localhost:3333/index.html')
})